﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using log4net;
using Telerik.WinControls.UI;
using System.IO;
using Telerik.WinControls;
using Telerik.WinControls.UI.Export;
namespace QuanLyNhaSach
{
    public partial class frmBC_ChiTietBanHang : Form
    {
        public frmBC_ChiTietBanHang()
        {
            InitializeComponent();
        }

        //Tao Parttern Seleton
        static frmBC_ChiTietBanHang doituong = null;
        private ILog logger;
        sv_QuanLyNhaSach.AdapterClient service = new sv_QuanLyNhaSach.AdapterClient();

        public static frmBC_ChiTietBanHang TaoDoiTuong()
        {
            if (doituong == null)
                doituong = new frmBC_ChiTietBanHang();
            return doituong;
        }

        private void frmBC_ChiTietBanHang_Load(object sender, EventArgs e)
        {
            dtpngaybatdau.Value = DateTime.Parse("1/1/2010");
            rdbBanle.Checked = true;
            logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            try
            {
                if (rdbBanle.Checked == true)
                {
                    Load_HDBL();
                }
                else
                {
                    Load_HDBS();
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: "+ex.Message);
            }
        }

        private void Load_HDBL()
        {
            taosizeHDBL();
            radGroupBox1.Text = "Hóa đơn bán lẻ";
            DataSet ds = new DataSet();
            string batdau = dtpngaybatdau.Value.Month + "/" + dtpngaybatdau.Value.Day + "/" + dtpngaybatdau.Value.Year;
            string ketthuc = dtpngayketthuc.Value.Month + "/" + dtpngayketthuc.Value.Day + "/" + dtpngayketthuc.Value.Year;
            ds.ReadXml(new StringReader(service.selectqueryByText("select * from HoaDonBanLe where NgayBanLe between '" + batdau + "' and '" + ketthuc+"'")));
            if (ds.Tables.Count > 0)
            {
                ds.Tables[0].Columns.Add("stt", typeof(int));
                DataRow dr;
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    dr = ds.Tables[0].NewRow();
                    dr["stt"] = i + 1;
                    ds.Tables[0].Rows[i]["stt"] = dr["stt"].ToString();
                    ds.Tables[0].Rows[i]["TongThanhTien"] = ds.Tables[0].Rows[i]["TongThanhTien"].ToString().Replace(".0000", "");
                    ds.Tables[0].Rows[i]["NgayBanLe"] = DateTime.Parse(ds.Tables[0].Rows[i]["NgayBanLe"].ToString()).Day.ToString("00") + "/" + DateTime.Parse(ds.Tables[0].Rows[i]["NgayBanLe"].ToString()).Month.ToString("00") + "/" + DateTime.Parse(ds.Tables[0].Rows[i]["NgayBanLe"].ToString()).Year.ToString("0000");
                }                
                gv_hoadon.DataSource = ds.Tables[0];
            }
        }
        private void Load_HDBS()
        {
            taosizeHDBS();
            radGroupBox1.Text = "Hóa đơn bán sỉ";
            DataSet ds = new DataSet();
            string batdau = dtpngaybatdau.Value.Month + "/" + dtpngaybatdau.Value.Day + "/" + dtpngaybatdau.Value.Year;
            string ketthuc = dtpngayketthuc.Value.Month + "/" + dtpngayketthuc.Value.Day + "/" + dtpngayketthuc.Value.Year;
            ds.ReadXml(new StringReader(service.selectqueryByText("select * from HoaDonBanSi,KhachHang where HoaDonBanSi.MaKH=KhachHang.MaKH and NgayBanSi between '" + batdau + "' and '" + ketthuc + "' ")));
            if (ds.Tables.Count > 0)
            {
                ds.Tables[0].Columns.Add("stt", typeof(int));
                DataRow dr;
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    dr = ds.Tables[0].NewRow();
                    dr["stt"] = i + 1;
                    ds.Tables[0].Rows[i]["stt"] = dr["stt"].ToString();
                    ds.Tables[0].Rows[i]["TongThanhTien"] = ds.Tables[0].Rows[i]["TongThanhTien"].ToString().Replace(".0000", "");
                    ds.Tables[0].Rows[i]["SoTienDaTra"] = ds.Tables[0].Rows[i]["SoTienDaTra"].ToString().Replace(".0000", "");
                    ds.Tables[0].Rows[i]["NgayBanSi"] = DateTime.Parse(ds.Tables[0].Rows[i]["NgayBanSi"].ToString()).Day.ToString("00") + "/" + DateTime.Parse(ds.Tables[0].Rows[i]["NgayBanSi"].ToString()).Month.ToString("00") + "/" + DateTime.Parse(ds.Tables[0].Rows[i]["NgayBanSi"].ToString()).Year.ToString("0000");
                }                
                gv_hoadon.DataSource = ds.Tables[0];
                Load_CT_HDBL(gv_hoadon.CurrentRow.Cells["mahdbs"].Value.ToString());
            }
        }
        private void Load_CT_HDBL(string mahd)
        {
            DataSet ds = new DataSet();
            ds.ReadXml(new StringReader(service.selectqueryByText("select ct.MaMH,ct.SoLuong,TenMH,SoLuong,DonGia,ct.ChietKhau,thanhtien from CTHDBanLe ct,MatHang where ct.MaMH=MatHang.MaMH and MaHDBL='" + mahd + "'")));
            if (ds.Tables.Count>0)
            {
                gv_cthoadon.DataSource = ds.Tables[0];
            }
        }
        private void Load_CT_HDBS(string mahd)
        {
            DataSet ds = new DataSet();
            ds.ReadXml(new StringReader(service.selectqueryByText("select ct.MaMH,ct.SoLuong,TenMH,SoLuong,DonGia,ct.ChietKhau,thanhtien from CTHDBanSi ct,MatHang where ct.MaMH=MatHang.MaMH and MaHDBS='" + mahd + "'")));
            if (ds.Tables.Count > 0)
            {
                gv_cthoadon.DataSource = ds.Tables[0];
            }
        }
        private void taosizeHDBL()
        {
            gv_hoadon.Columns.Clear();
            GridViewDataColumn stt = new GridViewTextBoxColumn();
            stt.HeaderText = "STT";
            stt.FieldName = "stt";
            stt.Width = 30;
            gv_hoadon.Columns.Add(stt);
            GridViewDataColumn mahdbl = new GridViewTextBoxColumn();
            mahdbl.HeaderText = "Mã HĐ";
            mahdbl.FieldName = "mahdbl";
            mahdbl.Width = 100;
            gv_hoadon.Columns.Add(mahdbl);
            GridViewDataColumn chungtubanle = new GridViewTextBoxColumn();
            chungtubanle.HeaderText = "Số chứng từ";
            chungtubanle.FieldName = "chungtubanle";
            chungtubanle.Width = 150;
            gv_hoadon.Columns.Add(chungtubanle);
            GridViewDataColumn ngaybanle = new GridViewTextBoxColumn();
            ngaybanle.HeaderText = "Ngày bán";
            ngaybanle.FieldName = "ngaybanle";
            ngaybanle.Width = 200;
            gv_hoadon.Columns.Add(ngaybanle);
            GridViewDataColumn tongthanhtien = new GridViewTextBoxColumn();
            tongthanhtien.HeaderText = "Tổng thành tiền";
            tongthanhtien.FieldName = "tongthanhtien";
            tongthanhtien.TextAlignment = ContentAlignment.MiddleRight;
            tongthanhtien.Width = 150;
            gv_hoadon.Columns.Add(tongthanhtien);            
            gv_hoadon.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
        }
        private void taosizeHDBS()
        {
            gv_hoadon.Columns.Clear();
            GridViewDataColumn stt = new GridViewTextBoxColumn();
            stt.HeaderText = "STT";
            stt.FieldName = "stt";
            stt.Width = 30;
            gv_hoadon.Columns.Add(stt);
            GridViewDataColumn mahdbs = new GridViewTextBoxColumn();
            mahdbs.HeaderText = "Mã HĐ";
            mahdbs.FieldName = "mahdbs";
            mahdbs.Width = 100;
            gv_hoadon.Columns.Add(mahdbs);
            GridViewDataColumn chungtubansi = new GridViewTextBoxColumn();
            chungtubansi.HeaderText = "Số chứng từ";
            chungtubansi.FieldName = "chungtubansi";
            chungtubansi.Width = 100;
            gv_hoadon.Columns.Add(chungtubansi);
            GridViewDataColumn hotenkh = new GridViewTextBoxColumn();
            hotenkh.HeaderText = "Khách hàng";
            hotenkh.FieldName = "hotenkh";
            hotenkh.Width = 200;
            gv_hoadon.Columns.Add(hotenkh);
            GridViewDataColumn ngaybanle = new GridViewTextBoxColumn();
            ngaybanle.HeaderText = "Ngày bán";
            ngaybanle.FieldName = "ngaybansi";
            ngaybanle.Width = 150;
            gv_hoadon.Columns.Add(ngaybanle);
            GridViewDataColumn tongthanhtien = new GridViewTextBoxColumn();
            tongthanhtien.HeaderText = "Tổng thành tiền";
            tongthanhtien.FieldName = "tongthanhtien";
            tongthanhtien.TextAlignment = ContentAlignment.MiddleRight;
            tongthanhtien.Width = 150;
            gv_hoadon.Columns.Add(tongthanhtien);
            GridViewDataColumn sotiendatra = new GridViewTextBoxColumn();
            sotiendatra.HeaderText = "Đã trả";
            sotiendatra.FieldName = "sotiendatra";
            sotiendatra.TextAlignment = ContentAlignment.MiddleRight;
            sotiendatra.Width = 150;
            gv_hoadon.Columns.Add(sotiendatra);
            
        }

        private void rdbBanle_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                errorProvider1.Clear();
                if (dtpngaybatdau.Value > DateTime.Now)
                {
                    errorProvider1.SetError(dtpngaybatdau, "Ngày bắt đầu phải nhỏ hơn hoặc bằng ngày hiện tại");
                }
                else if (dtpngayketthuc.Value > DateTime.Now)
                {
                    errorProvider1.SetError(dtpngayketthuc, "Ngày đến phải nhỏ hơn hoặc bằng ngày hiện tại");
                }
                else if ((DateTime.Now.Year - dtpngaybatdau.Value.Year) > 3)
                {
                    errorProvider1.SetError(dtpngaybatdau, "Năm bắt đầu không lâu 3 năm so với năm nay");
                }
                else if ((DateTime.Now.Year - dtpngayketthuc.Value.Year) > 3)
                {
                    errorProvider1.SetError(dtpngayketthuc, "Năm đến không lâu 3 năm so với năm nay");
                }
                else if (dtpngaybatdau.Value > dtpngayketthuc.Value)
                {
                    errorProvider1.SetError(dtpngayketthuc, "Ngày kết thúc phải lớn hơn ngày bắt đầu!");
                }
                else
                {
                    if (rdbBanle.Checked == true)
                    {
                        Load_HDBL();
                    }
                    else
                    {
                        Load_HDBS();
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }



        private void gv_hoadon_CurrentRowChanged(object sender, CurrentRowChangedEventArgs e)
        {
            try
            {
                if (rdbBanle.Checked == true)
                {
                    Load_CT_HDBL(e.CurrentRow.Cells["MaHDBL"].Value.ToString());
                }
                else
                {
                    Load_CT_HDBS(e.CurrentRow.Cells["MaHDBS"].Value.ToString()); 
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }
        bool openExportFile = false;
        private void bt_excel_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "Excel (*.xls)|*.xls";
            if (saveFileDialog1.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            if (saveFileDialog1.FileName.Equals(String.Empty))
            {
                RadMessageBox.SetThemeName(this.gv_hoadon.ThemeName);
                RadMessageBox.Show("Làm ơn nhập tên file.");
                return;
            }
            string fileName = this.saveFileDialog1.FileName;

            ExportToExcelML excelExporter = new ExportToExcelML(this.gv_hoadon);

            excelExporter.SheetMaxRows = ExcelMaxRows._1048576;
            excelExporter.ExportVisualSettings = this.exportVisualSettings;


            try
            {
                excelExporter.RunExport(fileName);

                RadMessageBox.SetThemeName(this.gv_hoadon.ThemeName);
                DialogResult dr = RadMessageBox.Show("Dữ liệu trong Grid đã được in thành công. Bạn có muốn mở file này không?",
                    "Export to Excel", MessageBoxButtons.YesNo, RadMessageIcon.Question);
                if (dr == DialogResult.Yes)
                {
                    openExportFile = true;
                }
            }
            catch (IOException ex)
            {
                RadMessageBox.SetThemeName(this.gv_hoadon.ThemeName);
                RadMessageBox.Show(this, ex.Message, "I/O Error", MessageBoxButtons.OK, RadMessageIcon.Error);
            }
        }
        //private void taosizeCTHD()
        //{
        //    gv_cthoadon.Columns.Clear();
        //    GridViewDataColumn stt = new GridViewTextBoxColumn();
        //    stt.HeaderText = "STT";
        //    stt.FieldName = "stt";
        //    gv_cthoadon.Columns.Add(stt);
        //    GridViewDataColumn mamh = new GridViewTextBoxColumn();
        //    mamh.HeaderText = "Mã MH";
        //    mamh.FieldName = "mamh";
        //    gv_cthoadon.Columns.Add(mamh);
        //    GridViewDataColumn temmh = new GridViewTextBoxColumn();
        //    temmh.HeaderText = "Tên mặt hàng";
        //    temmh.FieldName = "temmh";
        //    gv_hoadon.Columns.Add(temmh);
        //    GridViewDataColumn soluong = new GridViewTextBoxColumn();
        //    soluong.HeaderText = "Số lượng";
        //    soluong.FieldName = "soluong";
        //    gv_cthoadon.Columns.Add(soluong);
        //    GridViewDataColumn chietkhau = new GridViewTextBoxColumn();
        //    chietkhau.HeaderText = "Khuyến mãi";
        //    chietkhau.FieldName = "chietkhau";
        //    gv_cthoadon.Columns.Add(chietkhau);
        //    GridViewDataColumn dongia = new GridViewTextBoxColumn();
        //    dongia.HeaderText = "Đơn giá";
        //    dongia.FieldName = "dongia";
        //    gv_cthoadon.Columns.Add(dongia);
        //    GridViewDataColumn thanhtien = new GridViewTextBoxColumn();
        //    thanhtien.HeaderText = "Thành tiền";
        //    thanhtien.FieldName = "thanhtien";
        //    gv_cthoadon.Columns.Add(thanhtien);
        //}

        public bool exportVisualSettings { get; set; }

        private void bt_xemin_Click(object sender, EventArgs e)
        {
            try
            {
                if (rdbBanle.Checked == true)
                {
                    Report.frm_BC_BanLe bcbanle = new Report.frm_BC_BanLe();
                    if (dtpngaybatdau.Value > DateTime.Now)
                    {
                        errorProvider1.SetError(dtpngaybatdau, "Ngày bắt đầu phải nhỏ hơn hoặc bằng ngày hiện tại");
                    }
                    else if (dtpngayketthuc.Value > DateTime.Now)
                    {
                        errorProvider1.SetError(dtpngayketthuc, "Ngày đến phải nhỏ hơn hoặc bằng ngày hiện tại");
                    }
                    else if ((DateTime.Now.Year - dtpngaybatdau.Value.Year) > 3)
                    {
                        errorProvider1.SetError(dtpngaybatdau, "Năm bắt đầu không lâu 3 năm so với năm nay");
                    }
                    else if ((DateTime.Now.Year - dtpngayketthuc.Value.Year) > 3)
                    {
                        errorProvider1.SetError(dtpngayketthuc, "Năm đến không lâu 3 năm so với năm nay");
                    }
                    else if (dtpngaybatdau.Value > dtpngayketthuc.Value)
                    {
                        errorProvider1.SetError(dtpngayketthuc, "Ngày kết thúc phải lớn hơn ngày bắt đầu!");
                    }
                    else
                    {
                        bcbanle.TuNgay = dtpngaybatdau.Value;
                        bcbanle.DenNgay = dtpngaybatdau.Value;
                        bcbanle.ShowDialog();
                    }
                }
                else if (rdbBansi.Checked == true)
                {
                    Report.frm_BC_BanSi bcbansi = new Report.frm_BC_BanSi();
                    if (dtpngaybatdau.Value > DateTime.Now)
                    {
                        errorProvider1.SetError(dtpngaybatdau, "Ngày bắt đầu phải nhỏ hơn hoặc bằng ngày hiện tại");
                    }
                    else if (dtpngayketthuc.Value > DateTime.Now)
                    {
                        errorProvider1.SetError(dtpngayketthuc, "Ngày đến phải nhỏ hơn hoặc bằng ngày hiện tại");
                    }
                    else if ((DateTime.Now.Year - dtpngaybatdau.Value.Year) > 3)
                    {
                        errorProvider1.SetError(dtpngaybatdau, "Năm bắt đầu không lâu 3 năm so với năm nay");
                    }
                    else if ((DateTime.Now.Year - dtpngayketthuc.Value.Year) > 3)
                    {
                        errorProvider1.SetError(dtpngayketthuc, "Năm đến không lâu 3 năm so với năm nay");
                    }
                    else if (dtpngaybatdau.Value > dtpngayketthuc.Value)
                    {
                        errorProvider1.SetError(dtpngayketthuc, "Ngày kết thúc phải lớn hơn ngày bắt đầu!");
                    }
                    else
                    {
                        bcbansi.TuNgay = dtpngaybatdau.Value;
                        bcbansi.DenNgay = dtpngaybatdau.Value;
                        bcbansi.ShowDialog();
                    }
                }
            }
            catch (Exception ex)
            {

            }
        }

        private void bt_tim_Click(object sender, EventArgs e)
        {
            try
            {
                if (rdbBanle.Checked == true)
                {
                    Load_HDBL();
                }
                else
                {
                    Load_HDBS();
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private void bt_DongForm_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
